大家好,我是Leo
今天我來介紹的是django migrations 底下會帶大家操作及一些用法
OK~~~ Let's go now!!!
Migration,資料遷移功能的一種,是用來同步Django專案下models.py及資料庫。換句話說,只要Django專案中的models.py有變動,都要執行一次Migration(資料遷移),來同步資料庫。
python .\manage.py makemigrations
python .\manage.py migrate
python .\manage.py showmigrations
這些遷移的migrations記錄檔都會放置在django_migrations下
用途 : 不對現有的數據庫改動,而又可以重置migraion文件。
重置遷移
python manage.py migrate website zero
查看狀態,就屬於未執行的階段
python .\manage.py showmigrations
也可以回溯版本,例如我現在在0004今天要回去0002版(版本前打上appname),如下圖
python manage.py migrate website 0002_user_roles
重新在資料庫中django_migrations記錄 migrate執行記錄,但並不會執行migrations文件中的代碼。
python manage.py migrate 0002_user_roles –fake
我在這邊直接重新創建一個database
drop database mydb;
create database mydb;
python manage.py makemigrations
python manage.py migrate
在我環境migrations底下有兩個檔案分別是,如下圖
還記得我們昨天user_roles嗎?我們今天直接用migrations生長的方式將它生成至資料庫
在 migrations資料夾內add new 0002_add_user_roles.py
在下面要注意的是"0001_initial" 名字需跟0002_add_user_roles 上一筆檔名一模一樣
website_user_roles -> 需改成你們的tablename
from __future__ import unicode_literals
from django.db import models, migrations
def add_user_roles(apps, schema_editor):
user_roles = apps.get_model("website", "User_Roles")
role1 = user_roles(id=1,name='manage',salary=30000)
role2 = user_roles(id=2,name='engineer',salary=20000)
role3 = user_roles(id=3, name='parttime', salary=10000)
role1.save()
role2.save()
role3.save()
def delete_all(apps, schema_editor):
return 'SET FOREIGN_KEY_CHECKS=0; DELETE from website_user_roles;'
class Migration(migrations.Migration):
dependencies = [
('website', '0001_initial'),
]
operations = [
migrations.RunPython(add_user_roles,delete_all),
]
寫完後直接執行下圖代碼
python manage.py migrate
我們發現資料直接生成至database內
今天主要是介紹makemigrations,及一些使用方式,與大家用migrations寫入進資料庫
明天預計會做從filefields上傳的api開始講解起
我們明天見,各位掰掰~~~